import { Token } from '@/types/data'
import { getToken, setToken } from '@/utils/auth'
import { createSlice, PayloadAction } from '@reduxjs/toolkit'


// state变量类型
export interface loginState {
  token: Token
}
export const login = createSlice({
  // 命名空间，在调用action的时候会默认的设置为action命令的前缀,避免冲突
  name: 'login',
  // 1. 定义变量(状态数据)
  initialState: {
    token: getToken() || {
      token: '',
      refresh_token: ''
    }
  } as loginState,
  // 2. 定义reducers更新变量(其中函数属性名作为action，在组件中可以dispatch触发reducer函数更新状态)
  reducers: {
    changeToken(state, action: PayloadAction<Token>) {
      state.token = action.payload
      // 本地持久化存储一份
      setToken(action.payload)
    }
  },
})

// 导出action函数(组件中可以dispatch(action函数)触发reducer更新状态)
export const { changeToken } = login.actions



// 导出reducer(创建store使用)
export default login.reducer